{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0-alpha0\n",
      "2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "# 导入\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras import layers\n",
    "\n",
    "print(tf.__version__)\n",
    "print(tf.keras.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 784)   (60000,)\n",
      "(10000, 784)   (10000,)\n",
      "uint8\n"
     ]
    }
   ],
   "source": [
    "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
    "x_train = x_train.reshape([x_train.shape[0], -1])\n",
    "x_test = x_test.reshape([x_test.shape[0], -1])\n",
    "print(x_train.shape, ' ', y_train.shape)\n",
    "print(x_test.shape, ' ', y_test.shape)\n",
    "print(x_train.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个简单的神经网络\n",
    "model = tf.keras.Sequential()\n",
    "model.add(layers.Dense(64,activation='relu',input_shape=(784,)))\n",
    "model.add(layers.Dense(32,activation='relu',kernel_initializer=tf.keras.initializers.glorot_normal))\n",
    "model.add(layers.Dense(32,activation='relu',kernel_regularizer=tf.keras.regularizers.l2(0.01)))\n",
    "model.add(layers.Dense(10,activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "# \n",
    "model = tf.keras.Sequential([\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal', input_shape=(784,)),\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal'),\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)),\n",
    "    layers.Dense(10, activation='softmax')\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_10\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_80 (Dense)             (None, 64)                50240     \n",
      "_________________________________________________________________\n",
      "dense_81 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dense_82 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dense_83 (Dense)             (None, 10)                650       \n",
      "=================================================================\n",
      "Total params: 59,210\n",
      "Trainable params: 59,210\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 如果你的 targets 是 one-hot 编码，用 categorical_crossentropy\n",
    "# 如果你的 tagets 是 数字编码 ，用 sparse_categorical_crossentropy\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(),\n",
    "              loss='sparse_categorical_crossentropy',\n",
    "              metrics=['accuracy'])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "history = model.fit(x_train, y_train, batch_size=256, epochs=100, validation_split=0.3, verbose=0)\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.legend(['training', 'validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'validation_data': None,\n",
       " 'model': <tensorflow.python.keras.engine.sequential.Sequential at 0x1358dc6d8>,\n",
       " '_chief_worker_only': None,\n",
       " 'params': {'batch_size': 256,\n",
       "  'epochs': 100,\n",
       "  'steps': None,\n",
       "  'samples': 42000,\n",
       "  'verbose': 0,\n",
       "  'do_validation': True,\n",
       "  'metrics': ['loss', 'accuracy', 'val_loss', 'val_accuracy']},\n",
       " 'epoch': [0,\n",
       "  1,\n",
       "  2,\n",
       "  3,\n",
       "  4,\n",
       "  5,\n",
       "  6,\n",
       "  7,\n",
       "  8,\n",
       "  9,\n",
       "  10,\n",
       "  11,\n",
       "  12,\n",
       "  13,\n",
       "  14,\n",
       "  15,\n",
       "  16,\n",
       "  17,\n",
       "  18,\n",
       "  19,\n",
       "  20,\n",
       "  21,\n",
       "  22,\n",
       "  23,\n",
       "  24,\n",
       "  25,\n",
       "  26,\n",
       "  27,\n",
       "  28,\n",
       "  29,\n",
       "  30,\n",
       "  31,\n",
       "  32,\n",
       "  33,\n",
       "  34,\n",
       "  35,\n",
       "  36,\n",
       "  37,\n",
       "  38,\n",
       "  39,\n",
       "  40,\n",
       "  41,\n",
       "  42,\n",
       "  43,\n",
       "  44,\n",
       "  45,\n",
       "  46,\n",
       "  47,\n",
       "  48,\n",
       "  49,\n",
       "  50,\n",
       "  51,\n",
       "  52,\n",
       "  53,\n",
       "  54,\n",
       "  55,\n",
       "  56,\n",
       "  57,\n",
       "  58,\n",
       "  59,\n",
       "  60,\n",
       "  61,\n",
       "  62,\n",
       "  63,\n",
       "  64,\n",
       "  65,\n",
       "  66,\n",
       "  67,\n",
       "  68,\n",
       "  69,\n",
       "  70,\n",
       "  71,\n",
       "  72,\n",
       "  73,\n",
       "  74,\n",
       "  75,\n",
       "  76,\n",
       "  77,\n",
       "  78,\n",
       "  79,\n",
       "  80,\n",
       "  81,\n",
       "  82,\n",
       "  83,\n",
       "  84,\n",
       "  85,\n",
       "  86,\n",
       "  87,\n",
       "  88,\n",
       "  89,\n",
       "  90,\n",
       "  91,\n",
       "  92,\n",
       "  93,\n",
       "  94,\n",
       "  95,\n",
       "  96,\n",
       "  97,\n",
       "  98,\n",
       "  99],\n",
       " 'history': {'loss': [8.437718522298903,\n",
       "   2.357544640677316,\n",
       "   1.7002781183606102,\n",
       "   1.3980906618209112,\n",
       "   1.1814433831714448,\n",
       "   1.0336150362832206,\n",
       "   0.9135284706751505,\n",
       "   0.8124485169138227,\n",
       "   0.7221871845608666,\n",
       "   0.6730246082260495,\n",
       "   0.6103340069679987,\n",
       "   0.5343793881734212,\n",
       "   0.4816385423569452,\n",
       "   0.43698079171634857,\n",
       "   0.40379639354206265,\n",
       "   0.3711909778912862,\n",
       "   0.33780895186038246,\n",
       "   0.3105452727590288,\n",
       "   0.28025641251745675,\n",
       "   0.2596446001075563,\n",
       "   0.24419910172053746,\n",
       "   0.2309216803539367,\n",
       "   0.20289165029071626,\n",
       "   0.20754407046522413,\n",
       "   0.17521207724298749,\n",
       "   0.18277911529370716,\n",
       "   0.1589859352565947,\n",
       "   0.15268414610908146,\n",
       "   0.14591152935368673,\n",
       "   0.13952233372415815,\n",
       "   0.12598975459450767,\n",
       "   0.11258242913087209,\n",
       "   0.10714296319371178,\n",
       "   0.09945984327367374,\n",
       "   0.09817989538539024,\n",
       "   0.09468804223196847,\n",
       "   0.15763916255604654,\n",
       "   0.08937746145611718,\n",
       "   0.09970106339738483,\n",
       "   0.07880203267222359,\n",
       "   0.06989993348575774,\n",
       "   0.08629210767291841,\n",
       "   0.06771168963114421,\n",
       "   0.062072345349050706,\n",
       "   0.05080296828633263,\n",
       "   0.0756305841455857,\n",
       "   0.058211947055090044,\n",
       "   0.047801253565720146,\n",
       "   0.046462226793169976,\n",
       "   0.04273955522690501,\n",
       "   0.0474310295432806,\n",
       "   0.04636426004625502,\n",
       "   0.048053101562318346,\n",
       "   0.045874089420551344,\n",
       "   0.04420295018951098,\n",
       "   0.04041533262247131,\n",
       "   0.04589848141443162,\n",
       "   0.05949500250958261,\n",
       "   0.044578521406366714,\n",
       "   0.03610926370677494,\n",
       "   0.034084301228679365,\n",
       "   0.02854341921245768,\n",
       "   0.02534550774665106,\n",
       "   0.02843008672942718,\n",
       "   0.03220084526567232,\n",
       "   0.03697063013875768,\n",
       "   0.03530224114088785,\n",
       "   0.03415065226668403,\n",
       "   0.05452030127814838,\n",
       "   0.029927321000822953,\n",
       "   0.02502174919843674,\n",
       "   0.029738982266968205,\n",
       "   0.03226728290461359,\n",
       "   0.028855940997600554,\n",
       "   0.02132418060586566,\n",
       "   0.021561449388308184,\n",
       "   0.021687478311005093,\n",
       "   0.027382235345741114,\n",
       "   0.030752021865475744,\n",
       "   0.030063358807847614,\n",
       "   0.021292273210982482,\n",
       "   0.020995407320913814,\n",
       "   0.02541074490653617,\n",
       "   0.021289058034973486,\n",
       "   0.014333809932782536,\n",
       "   0.021000969222258952,\n",
       "   0.02391407853081113,\n",
       "   0.06740953958602179,\n",
       "   0.024477290454364958,\n",
       "   0.018743126297280904,\n",
       "   0.012065009579772041,\n",
       "   0.010344116973025458,\n",
       "   0.00753281436736385,\n",
       "   0.005917358956344071,\n",
       "   0.005099006136790627,\n",
       "   0.004566643674636171,\n",
       "   0.004236636581786332,\n",
       "   0.009336060721959387,\n",
       "   0.05190469476793493,\n",
       "   0.04164448164261523],\n",
       "  'accuracy': [0.72959524,\n",
       "   0.84914285,\n",
       "   0.8747381,\n",
       "   0.89638096,\n",
       "   0.9124048,\n",
       "   0.92235714,\n",
       "   0.93057144,\n",
       "   0.93680954,\n",
       "   0.94435716,\n",
       "   0.94416666,\n",
       "   0.9470476,\n",
       "   0.95626193,\n",
       "   0.9606429,\n",
       "   0.9635,\n",
       "   0.9647857,\n",
       "   0.96540475,\n",
       "   0.968,\n",
       "   0.96992856,\n",
       "   0.9725952,\n",
       "   0.9735,\n",
       "   0.9735238,\n",
       "   0.97335714,\n",
       "   0.97783333,\n",
       "   0.9731905,\n",
       "   0.9798095,\n",
       "   0.97440475,\n",
       "   0.9788333,\n",
       "   0.9787857,\n",
       "   0.97859526,\n",
       "   0.9787619,\n",
       "   0.9819286,\n",
       "   0.98407143,\n",
       "   0.9837143,\n",
       "   0.98509526,\n",
       "   0.98485714,\n",
       "   0.9845476,\n",
       "   0.9679286,\n",
       "   0.9848095,\n",
       "   0.98190475,\n",
       "   0.9871905,\n",
       "   0.98859525,\n",
       "   0.98411906,\n",
       "   0.98807144,\n",
       "   0.9896191,\n",
       "   0.9929048,\n",
       "   0.98490477,\n",
       "   0.9890714,\n",
       "   0.99214286,\n",
       "   0.9925714,\n",
       "   0.99288094,\n",
       "   0.99128574,\n",
       "   0.9915238,\n",
       "   0.99030954,\n",
       "   0.99083334,\n",
       "   0.9917619,\n",
       "   0.99190474,\n",
       "   0.9900714,\n",
       "   0.9870476,\n",
       "   0.99016666,\n",
       "   0.99273807,\n",
       "   0.9935714,\n",
       "   0.99538094,\n",
       "   0.996,\n",
       "   0.9945952,\n",
       "   0.99319047,\n",
       "   0.99190474,\n",
       "   0.9925238,\n",
       "   0.9927143,\n",
       "   0.9877143,\n",
       "   0.9937381,\n",
       "   0.9951429,\n",
       "   0.9937619,\n",
       "   0.9924524,\n",
       "   0.99419045,\n",
       "   0.99659526,\n",
       "   0.9959286,\n",
       "   0.99583334,\n",
       "   0.99419045,\n",
       "   0.99280953,\n",
       "   0.9933571,\n",
       "   0.99609524,\n",
       "   0.9963095,\n",
       "   0.99485713,\n",
       "   0.99588096,\n",
       "   0.9980952,\n",
       "   0.9951905,\n",
       "   0.9950714,\n",
       "   0.9842857,\n",
       "   0.99542856,\n",
       "   0.9968333,\n",
       "   0.9988095,\n",
       "   0.99892855,\n",
       "   0.9997619,\n",
       "   0.9999524,\n",
       "   0.9999524,\n",
       "   1.0,\n",
       "   0.9999524,\n",
       "   0.9985476,\n",
       "   0.98716664,\n",
       "   0.98992854],\n",
       "  'val_loss': [2.9274573152330188,\n",
       "   2.0765614178975422,\n",
       "   1.678146011458503,\n",
       "   1.4495710078345405,\n",
       "   1.3041832723617555,\n",
       "   1.182668034447564,\n",
       "   1.0949978144963581,\n",
       "   0.9833131594128078,\n",
       "   0.9095799820158217,\n",
       "   0.8617953311602274,\n",
       "   0.780908037715488,\n",
       "   0.7376603432761298,\n",
       "   0.681477668179406,\n",
       "   0.6384735070334541,\n",
       "   0.6013601883252462,\n",
       "   0.5745753079520332,\n",
       "   0.562268519586987,\n",
       "   0.53269183784061,\n",
       "   0.4956990557246738,\n",
       "   0.505137781686253,\n",
       "   0.46059858592351277,\n",
       "   0.42323093202379014,\n",
       "   0.4292228011025323,\n",
       "   0.4004397364722358,\n",
       "   0.4011199931833479,\n",
       "   0.3946154553625319,\n",
       "   0.3762989895078871,\n",
       "   0.36885615099800956,\n",
       "   0.38607622461186514,\n",
       "   0.36653090810775757,\n",
       "   0.36201789972517223,\n",
       "   0.33562327806154885,\n",
       "   0.3266346729861365,\n",
       "   0.3434378957218594,\n",
       "   0.3596391318904029,\n",
       "   0.4084822015762329,\n",
       "   0.3121833283901215,\n",
       "   0.3212170074913237,\n",
       "   0.29948504151238337,\n",
       "   0.2943264839384291,\n",
       "   0.3004862019750807,\n",
       "   0.2952055696911282,\n",
       "   0.3095228910313712,\n",
       "   0.2772168779902988,\n",
       "   0.2991541044447157,\n",
       "   0.2963284929990768,\n",
       "   0.30184796971413824,\n",
       "   0.2974830719497469,\n",
       "   0.27122400363286336,\n",
       "   0.2832819656994608,\n",
       "   0.3000988726086087,\n",
       "   0.2882163589000702,\n",
       "   0.28418043263753257,\n",
       "   0.3026645929813385,\n",
       "   0.2675156127744251,\n",
       "   0.3233805935117933,\n",
       "   0.29239940378401014,\n",
       "   0.3023247227138943,\n",
       "   0.29941151762008666,\n",
       "   0.31308123087882994,\n",
       "   0.277086126698388,\n",
       "   0.2692426208919949,\n",
       "   0.28386576480335657,\n",
       "   0.2898147999445597,\n",
       "   0.28983411310778723,\n",
       "   0.30001890569263034,\n",
       "   0.30592552234066855,\n",
       "   0.30940165955490534,\n",
       "   0.2836875465048684,\n",
       "   0.2753394436836243,\n",
       "   0.2854698538250393,\n",
       "   0.2865649726258384,\n",
       "   0.27239652501212225,\n",
       "   0.2976101849211587,\n",
       "   0.2798050055503845,\n",
       "   0.2919202344550027,\n",
       "   0.3173395177523295,\n",
       "   0.30373306229379443,\n",
       "   0.2892565569082896,\n",
       "   0.339063385936949,\n",
       "   0.28565475220150416,\n",
       "   0.3157148214975993,\n",
       "   0.28478623570336237,\n",
       "   0.28894959893491534,\n",
       "   0.2744761360751258,\n",
       "   0.2884629209306505,\n",
       "   0.3181614327960544,\n",
       "   0.28342119201024374,\n",
       "   0.2770639527108934,\n",
       "   0.30084508119357956,\n",
       "   0.26990205375353493,\n",
       "   0.265966033299764,\n",
       "   0.2574092717832989,\n",
       "   0.2466141469379266,\n",
       "   0.23815816479259067,\n",
       "   0.23547850553194682,\n",
       "   0.23926080194446775,\n",
       "   0.26625623565249973,\n",
       "   0.2803505591021644,\n",
       "   0.2692152307563358],\n",
       "  'val_accuracy': [0.8271667,\n",
       "   0.85344446,\n",
       "   0.87538886,\n",
       "   0.8897778,\n",
       "   0.89033335,\n",
       "   0.9003889,\n",
       "   0.9033333,\n",
       "   0.9128889,\n",
       "   0.91544443,\n",
       "   0.91833335,\n",
       "   0.92233336,\n",
       "   0.9241111,\n",
       "   0.92422223,\n",
       "   0.9276111,\n",
       "   0.9306667,\n",
       "   0.9318889,\n",
       "   0.93244445,\n",
       "   0.92983335,\n",
       "   0.9362778,\n",
       "   0.9276111,\n",
       "   0.93722224,\n",
       "   0.94116664,\n",
       "   0.9376111,\n",
       "   0.94277775,\n",
       "   0.9407778,\n",
       "   0.94155556,\n",
       "   0.9445,\n",
       "   0.9443333,\n",
       "   0.9381667,\n",
       "   0.94344443,\n",
       "   0.94405556,\n",
       "   0.94688886,\n",
       "   0.9485,\n",
       "   0.944,\n",
       "   0.942,\n",
       "   0.9345,\n",
       "   0.94894445,\n",
       "   0.9503889,\n",
       "   0.9516111,\n",
       "   0.9517222,\n",
       "   0.9507222,\n",
       "   0.95361114,\n",
       "   0.9516111,\n",
       "   0.9572222,\n",
       "   0.95111114,\n",
       "   0.95144445,\n",
       "   0.9535556,\n",
       "   0.95394444,\n",
       "   0.957,\n",
       "   0.9573333,\n",
       "   0.95294446,\n",
       "   0.9551111,\n",
       "   0.9563889,\n",
       "   0.95233333,\n",
       "   0.9576111,\n",
       "   0.9518333,\n",
       "   0.9561667,\n",
       "   0.9521667,\n",
       "   0.9543889,\n",
       "   0.95372224,\n",
       "   0.9598889,\n",
       "   0.95694447,\n",
       "   0.96033335,\n",
       "   0.95805556,\n",
       "   0.95555556,\n",
       "   0.9537778,\n",
       "   0.95633334,\n",
       "   0.95544446,\n",
       "   0.9565,\n",
       "   0.9588889,\n",
       "   0.95755553,\n",
       "   0.95755553,\n",
       "   0.9587778,\n",
       "   0.9571111,\n",
       "   0.9586667,\n",
       "   0.95838886,\n",
       "   0.95394444,\n",
       "   0.95772225,\n",
       "   0.95894444,\n",
       "   0.9501111,\n",
       "   0.95966667,\n",
       "   0.95677775,\n",
       "   0.95944446,\n",
       "   0.9595,\n",
       "   0.9617778,\n",
       "   0.9592222,\n",
       "   0.9542222,\n",
       "   0.95533335,\n",
       "   0.95883334,\n",
       "   0.96033335,\n",
       "   0.9646111,\n",
       "   0.9627778,\n",
       "   0.9643889,\n",
       "   0.96477777,\n",
       "   0.9656111,\n",
       "   0.9645,\n",
       "   0.9642778,\n",
       "   0.9598889,\n",
       "   0.9552778,\n",
       "   0.95705557]}}"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history.__dict__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 26us/sample - loss: 0.2146 - accuracy: 0.9694\n"
     ]
    }
   ],
   "source": [
    "results = model.evaluate(x_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "input_x = tf.keras.Input(shape=(784,))\n",
    "hidden1 = layers.Dense(64, activation='relu', kernel_initializer='he_normal')(input_x)\n",
    "hidden2 = layers.Dense(64, activation='relu', kernel_initializer='he_normal')(hidden1)\n",
    "hidden3 = layers.Dense(64, activation='relu', kernel_initializer='he_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01))(hidden2)\n",
    "output = layers.Dense(10, activation='softmax')(hidden3)\n",
    "\n",
    "model2 = tf.keras.Model(inputs = input_x,outputs = output)\n",
    "model2.compile(optimizer=tf.keras.optimizers.Adam(0.001),\n",
    "              #loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n",
    "               loss='sparse_categorical_crossentropy',\n",
    "              metrics=['accuracy'])\n",
    "history = model2.fit(x_train, y_train, batch_size=256, epochs=100, validation_split=0.3, verbose=0)\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.legend(['training', 'validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 33us/sample - loss: 0.2146 - accuracy: 0.9694\n"
     ]
    }
   ],
   "source": [
    "# 模型保存\n",
    "model.save('model.h5')\n",
    "model1 = tf.keras.models.load_model('model.h5')\n",
    "results = model1.evaluate(x_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 22us/sample - loss: 0.2146 - accuracy: 0.9694\n"
     ]
    }
   ],
   "source": [
    "model2.save('model2.h5')\n",
    "model3 = tf.keras.models.load_model('model2.h5')\n",
    "results = model1.evaluate(x_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_8\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_72 (Dense)             (None, 64)                50240     \n",
      "_________________________________________________________________\n",
      "batch_normalization_v2_3 (Ba (None, 64)                256       \n",
      "_________________________________________________________________\n",
      "dropout_3 (Dropout)          (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_73 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "batch_normalization_v2_4 (Ba (None, 64)                256       \n",
      "_________________________________________________________________\n",
      "dropout_4 (Dropout)          (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_74 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "batch_normalization_v2_5 (Ba (None, 64)                256       \n",
      "_________________________________________________________________\n",
      "dropout_5 (Dropout)          (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_75 (Dense)             (None, 10)                650       \n",
      "=================================================================\n",
      "Total params: 59,978\n",
      "Trainable params: 59,594\n",
      "Non-trainable params: 384\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "#  模型中加入batchNormalization 和 dropout\n",
    "model4 = tf.keras.Sequential([\n",
    "    layers.Dense(64, activation='relu', input_shape=(784,)),\n",
    "    layers.BatchNormalization(),\n",
    "    layers.Dropout(0.2),\n",
    "    layers.Dense(64, activation='relu'),\n",
    "    layers.BatchNormalization(),\n",
    "    layers.Dropout(0.2),\n",
    "    layers.Dense(64, activation='relu'),\n",
    "    layers.BatchNormalization(),\n",
    "    layers.Dropout(0.2),\n",
    "    layers.Dense(10, activation='softmax')\n",
    "])\n",
    "model4.compile(optimizer=tf.keras.optimizers.Adam(0.001),\n",
    "             loss='sparse_categorical_crossentropy',\n",
    "             metrics=['accuracy'])\n",
    "model4.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model4.compile(optimizer=tf.keras.optimizers.Adam(0.001),\n",
    "              #loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n",
    "               loss='sparse_categorical_crossentropy',\n",
    "              metrics=['accuracy'])\n",
    "history = model4.fit(x_train, y_train, batch_size=256, epochs=100, validation_split=0.3, verbose=0)\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.legend(['training', 'validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tf2",
   "language": "python",
   "name": "tf2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
